#include<bits/stdc++.h>
using namespace std;
#define int long long
struct p{
    int a[18];
    int b;
    void clear(){
        memset(a,0,sizeof(a));
        b=0;
    }
}w[200005<<2];
int aa[200005],a[200005];   
int c[200005];
vector<int>cc[200005];
int n,m;
int k=0;;
p merge(const p& a,const p& b,const bool& c,const int& d){
    if(c){
        return merge(b,a,!c,d);
    }
    p ans;
    if(a.b){
        ans=b;
    }else{
        for(int i=0;i<d;i++){
            if(a.a[i]){
                ans=b;
                goto z;
            }
        }

        ans.clear();
        z:;
    }
    ans.b+=a.b;
    for(int i=d;i<=k;i++){
        ans.a[i]+=a.a[i];
    }
    return ans;
}
void build(int now,int l,int r,int a,int b){
    if(l==r){
        if(l>n){
            // w[now].clear();
            w[now]={{},l};
        }else{
            w[now].clear();
            w[now].a[min<int>(k,::a[l])]=l;
        }
        return;
    }
    int le=r-l+1;le/=2;

    build(now<<1,l,l+le-1,a-1,(b<<1)-1);
    build(now<<1|1,r-le+1,r,a-1,b<<1);
    // 
    w[now]=merge(w[now<<1],w[now<<1|1],cc[a][b],a);
}
int sum(int a,int b){
    int le=b-a+1;
    return (a+b)*le/2;
}
p ge(int now,int l,int r,int c,int a,int b){
    if(r<=c){
        // cout<<now<<' '<<l<<'q'<<r<<' '<<a<<' '<<b<<'\n';
        // auto rr=w[now];
        // for(int i=0;i<=k;i++){
        //     cout<<rr.a[i]<<' ';
        // }
        // cout<<rr.b<<'\n';
        return w[now];
    }
    if(l>c){
        p o;
        o.clear();
        o.b=sum(l,r);
        // cout<<now<<' '<<l<<'w'<<r<<' '<<a<<' '<<b<<'\n';
        // auto rr=o;
        // for(int i=0;i<=k;i++){
        //     cout<<rr.a[i]<<',';
        // }
        // cout<<rr.b<<'\n';
        return o;
    }
    int le=r-l+1;le/=2;
    // cout<<now<<' '<<l<<'m'<<r<<' '<<cc[a][b]<<' '<<a<<' '<<b<<'\n';
    auto rr=merge(ge(now<<1,l,l+le-1,c,a-1,(b<<1)-1),ge(now<<1|1,r-le+1,r,c,a-1,b<<1),cc[a][b],a);
    // for(int i=0;i<=k;i++){
    //     cout<<rr.a[i]<<' ';
    // }
    // cout<<rr.b<<'\n';
    return rr;
}
signed main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>aa[i];
    for(int i=1;i<=m;i++)cin>>c[i];
    while((1ll<<k)<n)k++;
    for(int r=1;r<=k;r++){
        cc[r].resize((1ll<<(k-r))+1);
        for(int g=1;g<=(1ll<<(k-r));g++){
            char e;
            cin>>e;
            cc[r][g]=e-'0';
        }
    }
    int t;
    cin>>t;
    while(t--){
        int x[4];
        for(int i=0;i<=3;i++)cin>>x[i];
        for(int i=1;i<=n;i++)a[i]=aa[i]^x[i%4];
        build(1,1,(1ll<<k),k,1);

        int p=0;
        for(int i=1;i<=m;i++){
            int kk=0;
            while((1ll<<kk)<c[i])kk++;
            // cout<<kk<<endl;
            auto w=ge(1<<(k-kk),1,1ll<<kk,c[i],kk,1);
            int ans=w.b;
            for(int i=0;i<=k;i++){
                ans+=w.a[i];
            }
            p^=(ans*i);
            // cout<<ans<<' ';
        }
        cout<<p<<'\n';
    }
    return 0;
}